package com.linkmed.storage.controller;


import com.alibaba.fastjson.JSON;
import com.linkmed.storage.model.Dtree;
import com.linkmed.storage.model.FilePojo;
import com.linkmed.storage.service.FileService;
import com.linkmed.storage.utils.R;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * 文件管理
 *
 * @author dinghao
 * @date 2021/3/10
 */
@Slf4j
@RestController
@RequestMapping("file")
@RequiredArgsConstructor
public class FileController  {

    @Value("${storage.oss.folderPath}")
    private  String folderPath;
    @Autowired
    private FileService fileService;

    /**
     * 获取文件列表
     *
     * @param pojo
     * @return
     */
    @GetMapping({"", "/list"})
    public R getList(FilePojo pojo) {

        List<FilePojo> list = fileService.getList(pojo);
      /*  List<FilePojo> list = new ArrayList<>();
        FilePojo filePojo = new FilePojo();
        filePojo.setFileName("测试");
        filePojo.setName("a");
        filePojo.setType("dir");
        filePojo.setId(1L);
        filePojo.setIsDir(true);
        filePojo.setSize(20L);
        list.add(filePojo);
        FilePojo filePojo1 = new FilePojo();
        filePojo1.setFileName("测试");
        filePojo1.setName("测试");
        filePojo1.setSuffix("doc");//后缀名
        filePojo1.setType("doc");
        filePojo1.setId(1L);
        filePojo1.setIsDir(false);
        filePojo1.setSize(20L);
        list.add(filePojo1);
        list.add(filePojo1);*/
        return R.succeed(list, "查询成功");
    }

    /**
     * 获取树结构列表
     *
     * @param pojo
     * @return
     */
    @GetMapping("/getTree")
    public String getTree(FilePojo pojo) {
        List<Dtree> list =null; //fileService.getTreeList(pojo);
        return JSON.toJSONString(R.succeed(list, "查询成功"));
    }

    /**
     * 获取树结构目录列表
     *
     * @param pojo
     * @return
     */
    @GetMapping("/getDirTree")
    public String getDirTree(FilePojo pojo) {
        List<Dtree> list = null;//fileService.getDirTreeList(pojo);
        return JSON.toJSONString(R.succeed(list, "查询成功"));
    }

    /**
     * 获取目录列表
     *
     * @param id
     * @return
     */
    @GetMapping("/getDirs")
    public R getDirs(String id) {
        System.out.println(id+"=id");
        Map<String, Object> map = fileService.getDirs(id);
        return R.succeed(map, "查询成功");
    }










    /**
     * 根据url删除文件
     *
     * @param url
     */

    @PostMapping("/deleteFile")
    public R deleteFile(String url) {
        log.info("删除文件路径{}",url);
        if (fileService.deleteObject(url)) {
            return R.succeed("删除成功");
        }
        return R.failed("删除失败");

    }

    @GetMapping("/deleteMuiFiles")
    public R deleteMuiFiles(String url) {
        String urls [] =  url.split(",");
        for(String uri : urls){
            if (fileService.deleteObject(uri)) {
                log.info("删除文件目录{}成功",uri);
            }
            //log.info("删除文件目录{}失败",uri);
        }
return null;

    }


    @GetMapping("/deleteFiles")
    public R deleteFiles() {
        String urls [] =  folderPath.split(",");
        for(String uri : urls){
            if (fileService.deleteObject(uri)) {
                log.info("删除文件目录{}成功",uri);
            }
            //log.info("删除文件目录{}失败",uri);
        }
        return null;

    }

    /**
     * 根据id删除文件
     *
     * @param id
     */

    @PostMapping("/deleteByIds")
    public R deleteByIds(Long id) {
      /*  if (fileService.deleteByIds(id)) {
            return R.succeed("删除成功");
        }*/
        return R.failed("删除失败");

    }

    @GetMapping("/info")
    public R info() {
        fileService.info();
      /*  if (fileService.deleteByIds(id)) {
            return R.succeed("删除成功");
        }*/
        return R.failed("删除失败");

    }

    @GetMapping("/singleInfo")
    public R singleInfo(String prefix) {
        fileService.singleInfo(prefix);
      /*  if (fileService.deleteByIds(id)) {
            return R.succeed("删除成功");
        }*/
        return R.failed("删除失败");

    }


}
